<?php

/* Template Prozessor Klasse */

class TemplateProcessor {

	private $tpl_keyword_list	= null;


	function TemplateProcessor() {
	}


	function registerKeyword ( $keyword, $replacement ) {
		$this->tpl_keyword_list[$keyword] = $replacement; /* Keyword Hash */
	} 

	/**
	 * Registriert alle Werte von $object als {<objectelement>}
         * Template
	 **
	 * @param $object Objekt
         */

	function registerKeywordsFromObject( $object ) {
		foreach( $object as $key=>$value ) {
			$this->registerKeyword( "{".$key."}", $value );
		}	
	}

	function registerKeywordsFromSlashStrippedObject( $object ) {
		foreach( $object as $key=>$value ) {
			$this->registerKeyword( "{".$key."}", stripslashes($value) );
		}	
	}

	function getValueByKeyword( $keyword ) {
		return $this->tpl_keyword_list[$keyword];
	}

	private function replaceContent( $content ) {

		$tpl_content = $content;

		/* Schluesselworte ersetzen, dafuer ggf Callbacks aufrufen */
		foreach ( $this->tpl_keyword_list as $key => $value ) {
			
			if ( is_array ($value["callback"]) ) {
				/* Wert mit Callback Funktion */
				//echo "$key Callback = ".$value["callback"];
				$value = call_user_func( $value["callback"], $value["parameter"] );
			} 

			$tpl_content = str_replace($key, $value, $tpl_content);
		} 

		return $tpl_content;
	}

	/**
         * Ersetzt in der Datei $html_tpl_page alle bekannten Keywords mit den 
         * entsprechenden Werten und liefert das Ergebnis als Offscreen Buffer 
         * zurueck
         **
         * @param $html_tpl_page Zu includierende HTML/PHP Seite
         * @return Offscreenbuffer mit ersetzten Schluesselworten
         */

	function processPage( $html_tpl_page ) {

		/* Datei normal ueber PHP Parser includieren und Ergebnis
                 * in ein OffscreenBuffer schreiben */
		ob_start();
			include $html_tpl_page;
			$tpl_content = ob_get_contents();
		ob_end_clean();

		/* Schluesselworte ersetzen */
		$tpl_content = $this->replaceContent( $tpl_content );

		/* Zurueck liefern */
		return $tpl_content;
	}

	/**
         * Ersetzt im String $tpl_content alle bekannten Keywords mit den 
         * entsprechenden Werten und liefert das Ergebnis zurueck
         **
         * @param $tpl_content string
         * @return String mit ersetzten Schluesselworten
         */

	function processString( $tpl_content ) {

		/* Zurueck liefern */
		return $this->replaceContent( $tpl_content );
	}



	function processObjectTemplates( $object, $tplString ) {

		//$str = $originString; 
		$str = $tplString;
		foreach ( $object as $key=>$value ) {
			//echo "{".$key."} =>".$value."<br />";

			$str = str_replace("{".$key."}", $value, $str);
		}

		//echo "-->".$str."<br />";

		return $str;

	}

}

?>